package main

import (
	"fmt"
	"io"
	"os"
)

//TODO:大文件拷贝操作
/*
命令使用格式
14大文件拷贝.exe 源文件 目标文件
*/

func main() {
	args := os.Args //获取用户在控制台输入的参数(获取到的结果是字符串数组)
	if args == nil || len(args) != 3 {
		fmt.Println("useage: xxx srcFile dstFile")
		return
	}
	//源文件路径
	srcPath := args[1]
	//目标文件路径
	dstPath := args[2]

	if srcPath == dstPath {
		fmt.Println("源文件路径和目标文件路径不能相同")
		return
	}
	if srcPath == "" || dstPath == "" {
		fmt.Println("源文件或目标文件路径异常")
		return
	}

	//打开源文件
	srcFile, err1 := os.Open(srcPath)
	if err1 != nil {
		fmt.Println("打开源文件失败")
		return
	}

	//创建目标文件
	dstFile, err2 := os.Create(dstPath)
	if err2 != nil {
		fmt.Println("创建目标文件失败")
		return
	}

	//配置读取缓冲区
	buf := make([]byte, 1024)
	//循环读取源文件的内容
	for {
		//n为读取到的内容长度
		n, err := srcFile.Read(buf)
		//只是读取出错，不是读取完成后的EOF错误
		if err != nil && err != io.EOF {
			break
		}
		if n == 0 {
			fmt.Println("源文件读取完成")
			break
		}
		//切片读取
		tmp := buf[:n]
		//写入目标文件
		dstFile.Write(tmp)
	}
	defer srcFile.Close()
	defer dstFile.Close()

}
